package com.leetcode.August;

/**
 * @Description: 142. 环形链表 II
 *  * slow 和 head 以相同的速度移动，直到它们再次相遇。
 *  * 由于 slow 在环内首次与 fast 相遇的位置距离环的起始点与链表头到环起始点的距离相等，
 *  * 所以当 slow 和 head 以相同的速度移动时，它们会在环的起始点相遇。
 * @Author: Mr.Fxy
 * @CreateTime: 2024-08-24 17:59
 */
public class LC142环形链表II {
    public ListNode detectCycle(ListNode head) {
        if (head == null) return null;
        ListNode slow = head;
        ListNode fast = head;
        while (fast != null && fast.next != null) {
            slow = slow.next;
            fast = fast.next.next;
            if (slow == fast) {
                while (slow != head) {
                    slow = slow.next;
                    head=head.next;
                }
                return slow;
            }
        }
        return null;
    }
}
